#pragma once

#include <memory>
#include <utility>

#include <jsi/jsi.h>

#include "JsiSkData.h"
#include "JsiSkHostObjects.h"
#include "JsiSkTypeface.h"

namespace RNSkia {
namespace jsi = facebook::jsi;

class JsiSkTypefaceFactory : public JsiSkHostObject {
public:
    JSI_HOST_FUNCTION(MakeFreeTypeFaceFromData)
    {
        auto data = JsiSkData::fromValue(runtime, arguments[0]);
        auto fontMgr = JsiSkFontMgrFactory::getFontMgr(getContext());
        auto typeface = fontMgr->makeFromData(std::move(data));
        if (typeface == nullptr) {
            return jsi::Value::null();
        }
        return jsi::Object::createFromHostObject(runtime, std::make_shared<JsiSkTypeface>(getContext(), typeface));
    }

    JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkTypefaceFactory, MakeFreeTypeFaceFromData))

    explicit JsiSkTypefaceFactory(std::shared_ptr<RNSkPlatformContext> context) : JsiSkHostObject(std::move(context)) {}
};
} // namespace RNSkia
